//
//  HMNetworkTool.m
//  OC新浪微博
//
//  Created by wyman on 16/4/12.
//  Copyright © 2016年 wyman. All rights reserved.
//

#import "HMNetworkTool.h"
#import <AFNetworking.h>
@implementation HMNetworkTool

static HMNetworkTool *_instance;
/** 是为当前对象分配内存空间，所有方法都会最终调用的方法 */
/**
 无论如何实例化，在内存中都最多保留一个副本，对象应该保存在静态区
 静态区中的对象，是在整个程序结束后，才会被销毁。
 */
+ (id)allocWithZone:(struct _NSZone *)zone
{
    //    return nil;
    // 懒加载，不能保证多线程并发的实例化是唯一的
    // 加互斥锁，性能非常糟糕。苹果强烈不建议程序员使用！
    //    @synchronized(self) {
    //        if (_instance == nil) {
    //            _instance = [super allocWithZone:zone];
    //        }
    //    }
    // dispatch_once能够确保块代码中的操作只被执行一次
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // block中的代码只能被执行一次
        _instance = [super allocWithZone:zone];
    });
    return _instance;
}

+ (instancetype)sharedInstance
{
    // 无论调用多少次类方法，对象只会被初始化一次
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [[self alloc] init];
        _instance.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain",@"application/json",nil];
    });
    return _instance;
}

- (id)copyWithZone:(NSZone *)zone
{
    return _instance;
}

@end
